package 合并集合;

import java.util.Scanner;

public class Main {
    /*一共有 n个数，编号是 1∼n，最开始每个数各自在一个集合中。现在要进行 m
        个操作，操作共有两种：M a b，将编号为 a和 b
        的两个数所在的集合合并，如果两个数已经在同一个集合中，则忽略这个操作；
        Q a b，询问编号为 a和 b的两个数是否在同一个集合中；*/
    /*输入格式
    第一行输入整数 n和 m。
    接下来 m行，每行包含一个操作指令，指令为 M a b 或 Q a b 中的一种。*/
    static int N = 100010;
    static int[] p = new int[N];

    //并查集的核心操作，寻找根节点祖先 + 路径压缩
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int q = in.nextInt();
        //初始化
        for (int i = 1; i <= n; i++) {
            p[i] = i;
        }
        while (q-- > 0) {
            String s = in.next();
            int a = in.nextInt();
            int b = in.nextInt();
            //合并操作
            if (s.equals("M")) {
                p[find(a)] = find(b);
            } else if (s.equals("Q")) {
                //查找
                if (find(a) == find(b)) {
                    System.out.println("Yes");
                } else {
                    System.out.println("No");
                }
            }
        }
    }

    public static int find(int x){ //返回x所在的集合编号 + 路径压缩
        //祖先节点的父节点是自己本身
        if(p[x] != x){
            //将x的父亲置为x父亲的祖先节点,实现路径的压缩
            p[x] = find(p[x]);
        }
        return p[x];
    }
}